﻿/**
 * 通用js方法封装处理
 * By Lizhen
 */
import { pinyin } from 'pinyin-pro'

// 数值格式化
export function formatValue(value) {
  let result = value ? value / 1 : 0
  if (value > 100000000) {
    result = +(value / 10000).toFixed(2)  
  }
  if (value > 10000) {
    result = +(value / 10000).toFixed(2)
  }
  return result
}

// 单位格式化
export function formatUnit(value, suffix) {
  suffix = suffix ? suffix : ''
  let result = ''
  if (value > 100000000) {
    result = '亿'
  }
  if (value > 10000) {
    result = '万'
  }
  return result + suffix
}

// 手机号脱敏
export function maskPhoneNumber(phone) {
  if (!phone) return "";
  return phone.replace(/^(\d{3})\d*(\d{4})$/, "$1****$2");
}

// 身份证号脱敏
export function maskIdCardNumber(idCard) {
  if (!idCard) return "";
  return idCard.replace(/^(.{11})(.*)(.{0})$/, "$1**********$3");
}

// 默认密码生成
export function getDefaultPassword(username, phone) {
  const letterArr = pinyin(username, { pattern: 'first', toneType: 'none', type: 'array' })
  return letterArr.join('') + phone.slice(-4)
}

// 截取附件名称
export function getFileName (path) {
  if (path && path.lastIndexOf('/') > -1) {
    return path.slice(path.lastIndexOf('/') + 1)
  } else {
    return ''
  }
}

// 判断是否图片
export function isImage (path) {
  const imageExts = ['png', 'jpg', 'gif', 'webp', 'ico', 'bmp', 'jpeg']
  let format = ''
  if (path) {
    format = path.substring(path.lastIndexOf('.') + 1).toLowerCase()
  }
  return imageExts.indexOf(format) !== -1
}

// 下载文件
export function downloadFile (path) {
  const list = path.split(',')
  for (let i = 0; i < list.length; i++) {
    uni.showLoading({
      title: '下载中...'
    })
    const downloadPath = list[i].indexOf('http') === 0 ? list[i] : config.baseUrl + list[i]
    // #ifdef APP-PLUS
    let dtask = plus.downloader.createDownload(downloadPath, {
      // 本地路径开头使用file://，跟上手机文件本地目录storage/emulated/0，就是用户文件管理器能看到的。
      // filename: "file://storage/emulated/0/沃产链/" + getFileName(path)
    }, function (d, status) {
      // d为下载的文件对象
      if (status == 200) {
        // 下载成功, d.filename是文件在保存在本地的相对路径，使用下面的API可转为平台绝对路径
        let fileSaveUrl = plus.io.convertLocalFileSystemURL(d.filename)
        plus.runtime.openFile(d.filename) // 选择软件打开文件
        if (i === list.length - 1) {
          uni.hideLoading()
          uni.showToast({
            title: `文件已保存至：${fileSaveUrl}`,
            icon: 'none',
          })
        }
      } else {
        // 下载失败
        uni.hideLoading()
        uni.showToast({
          title: '文件下载失败',
          icon: 'none',
        })
        plus.downloader.clear() // 清除下载任务
      }
    })
    dtask.start()
    // #endif

    // #ifndef APP-PLUS
    uni.downloadFile({
      url: list[i],
      success: (res) => {
        if (res.statusCode === 200) {
          if (isImage(res.tempFilePath)) {
            uni.saveImageToPhotosAlbum({
              filePath: res.tempFilePath,
              success: function () {
                if (i === list.length - 1) {
                  uni.hideLoading()
                  uni.showToast({
                    title: '图片已保存至相册',
                    icon: 'none'
                  })
                }
              }
            })
          } else {
            uni.saveFile({
              tempFilePath: res.tempFilePath,
              success: (res) => {
                if (i === list.length - 1) {
                  uni.hideLoading()
                  uni.showToast({
                    title: `文件已保存至：${res.savedFilePath}`,
                    icon: 'none'
                  })
                }
                uni.openDocument({
                  showMenu: true,
                  filePath: res.savedFilePath,
                  success: function (res) {
                    uni.showToast({
                      title: '文件已打开',
                      icon: 'none'
                    })
                  }
                })
              }
            })
          }
        }
      }
    })
    // #endif
  }
}

// 数值输入限制
// type: min max precision
// params: minValue maxValue dotNum
// equal: 允许等于params
export function formatDigitValue(value, type, params, equal) {
  const dotParts = value.split('.')
  if (dotParts.length > 2) { // 限制小数点数量
    value = dotParts[0] + '.' + dotParts[1]
  }
  if ((type === 'min' || type === 'max') && params < 0) { // 支持负数
    value = value.replace(/[^0-9.-]/g, '')
  } else { // 只支持正数
    value = value.replace(/[^0-9.]/g, '')
  }
  if (type === 'min') { // 限制最小值
    if (equal && value < params) value = params // 限制小于等于params
    if (!equal && value <= params) value = params + 1 // 限制小于params
  }
  if (type === 'max') { // 限制最大值
    if (equal && value >= params) value = params - 1 // 限制小于等于params
    if (!equal && value > params) value = params // 限制小于params
  }
  if (type === 'precision') { // 限制小数精度
    const dotParts = value.split('.')
    if (dotParts.length > 1) {
      if (dotParts[1].length > params) {
        value = `${dotParts[0]}.${dotParts[1].slice(0, params)}`
      }
    }
  }
  return value / 1 ? value * 1 : ''
}

export function getObjectWithValues(obj) {
  return Object.keys(obj)
    .filter(key => !!obj[key])
    .reduce((result, key) => {
      result[key] = obj[key]
      return result
    }, {})
}
